From bf174cbbf46fde0a57ba03f64f46cbbd7be9c014 Mon Sep 17 00:00:00 2001 From: "kaf24@freefall.cl.cam.ac.uk" Date: Sun, 17 Oct 2004 09:46:39 +0000 Subject: [PATCH] bitkeeper revision 1.1159.113.3 (41723f7fO8wKQjhPjoowbDHAwaKf-g) Always check shadow time values are up to date in time interrupt. --- linux-2.4.27-xen-sparse/arch/xen/kernel/time.c | 15 +++++++++------ .../arch/xen/i386/kernel/time.c | 17 +++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c index 01584bda33..9ff844d70e 100644 --- a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c +++ b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c @@ -393,14 +393,17 @@ static inline void do_timer_interrupt(int irq, void *dev_id, unsigned long ticks = 0; long sec_diff; - retry: - __get_time_values_from_xen(); + do { + __get_time_values_from_xen(); + + delta = (s64)(shadow_system_time + + (__get_time_delta_usecs() * 1000) - + processed_system_time); + } + while ( !TIME_VALUES_UP_TO_DATE ); - if ( (delta = (s64)(shadow_system_time + __get_time_delta_usecs() * 1000 - - processed_system_time)) < 0 ) + if ( unlikely(delta < 0) ) { - if (!TIME_VALUES_UP_TO_DATE) - goto retry; printk("Timer ISR: Time went backwards: %lld\n", delta); return; } diff --git a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c b/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c index 9b5c862892..15b68ba45d 100644 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c +++ b/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c @@ -367,15 +367,16 @@ static inline void do_timer_interrupt(int irq, void *dev_id, s64 delta, nsec; long sec_diff, wtm_nsec; - retry: - __get_time_values_from_xen(); + do { + __get_time_values_from_xen(); + + delta = (s64)(shadow_system_time + + (cur_timer->get_offset() * NSEC_PER_USEC) - + processed_system_time); + } + while (!TIME_VALUES_UP_TO_DATE); - delta = (s64)(shadow_system_time + - (cur_timer->get_offset() * NSEC_PER_USEC) - - processed_system_time); - if (delta < 0) { - if (!TIME_VALUES_UP_TO_DATE) - goto retry; + if (unlikely(delta < 0)) { printk("Timer ISR: Time went backwards: %lld %lld %ld %lld\n", delta, shadow_system_time, (cur_timer->get_offset() * NSEC_PER_USEC), -- 2.30.2